<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function Star(name,age){
            this.name = name 
            this.age = age 
        }
        // ==> 背下来 每个原型对象都默认有一个constructor属性，指回构造函数本身。

        // Star.prototype.sing = function(){
        //     console.log('sing')
        // }
        // Star.prototype.dance = function(){
        //     console.log('跳舞')
        // }
        // Star.prototype.rap = function(){
        //     console.log('rapper')
        // }
        console.dir(Star)
        // 如果我们直接给原型对象赋值一个对象，相当于整个替换了原型对象里面的所有内容，
        // 原型内的constructor就丢失了。那我们也就不知道这个原型是和哪个构造函数相关联了
        // 所以，可以手动的利用constructor指回原来的构造函数
        Star.prototype = {
            constructor: Star, // 手动添加回来
            sing: function(){
                console.log('sing')
            },
            dance: function(){
                console.log('跳舞')
            },
            rap: function(){
                console.log('rapper')
            }
        }

        const ldh = new Star('刘德华', 18)
        console.log(ldh)
        ldh.sing()
        ldh.dance()
        ldh.rap()


        let obj = {a:1, b:2}
        obj.c = 3 
        // 给这个对象添加属性
        // console.log(obj)

        obj = {d:4}
        console.log(obj)

    </script>
</body>
</html>